package com.test.basic;

import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * 多数元素
 * 给定一个大小为 n 的数组，找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
 * 你可以假设数组是非空的，并且给定的数组总是存在多数元素。
 *
 * 输入：[2,2,1,1,1,2,2]
 * 输出：2
 */
public class MajorElementDemo {
    public static void main(String[] args) {
        int []nums = new int []{2,2,1,1,1,2,2};
        System.out.println(majorityElement(nums));
    }

    public static int majorityElement(int[] nums) {
        List<Integer> collect = Arrays.stream(nums).boxed().collect(Collectors.toList());
        Map<Integer, Long> map = collect.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        //数量最多的值
        Long max = map.values().stream().max((a, b) -> a.compareTo(b)).get();
        AtomicInteger result = new AtomicInteger();
        map.forEach((key,value)->{
            if(value == max){
                result.set(key.intValue());
            }
        });
        return result.get();
    }
}
